package com.bytezero.circle;
/**
 * 
 * 
 * @Description 
 * @author  Bytezero·zhenglei!      Email:420498246@qq.com
 * @version
 * @date 2021年9月14日下午3:55:02
 * @   面向对象的特征一：
 *     封装与隐藏
 *     创建一个类的对象以后，我们可以通过“对象.属性”的方式，对
 * 对象的属性进行赋值，这里，赋值操作要受到属性的数据类型和存储
 * 范围的制约，除此之外，没有其它制约条件，但是，实际问题中，我
 * 们往往需要给属性赋值加入额外的限制条件，这个条件不能再属性声
 * 明时体现，只能通过方法进行限制条件的添加。如（setLegs()）
 * 
 * 同时，我们需要避免用户再通过 “对象.属性”的方式对属性进行赋值。
 * 则需要经属性声明为私有的（private）
 *     --->此时 针对于属性就体现了封装性
 *     
 *   封装性的体现
 *   将类的属性(xxx)私有化（private），同时，提供公共的（public）方法来
 * 获取(getXxx)和设置(setXxx)此属性的值
 *     
 *     
 *  封装性的体现① 如上  ②  不对外暴露的私有方法 ③单例模式....... 
 *  
 *  
 *  三.封装性的体现，需要权限修饰符来配合。
 * 1.Java规定的4中权限（从小到大）：private 缺省 protected  public
 * 2.4中权限可以用来修饰类及类的内部结构：属性，方法，构造器，内部类
 * 3.具体的 4中权限都可以修饰类的内部结构
 *          修饰类的话 只能使用  缺省，public
 *          
 *    总结封装性：Java提供了4中权限修饰符来修饰类及类的内部结构，体现
 * 类及类的内部结构再被调用时的可见性的大小
 * 
 * 
 * 
 * 
 */
public class AnimalTest
{
	public static void main(String[] agrs)
	{
		//AnimalTest test = new AnimalTest();
		
		Animal animal = new Animal();
		animal.name="大黄";
		
		animal.setAge(2);
		//animal.legs = 4;  //The field Animal.legs is not visible
		//animal.eat();
		animal.show();
		
		//animal.legs=-4;
		//animal.show();
		
		//animal.setLegs(-5);   //0
		//animal.setLegs(5);    //0
		animal.setLegs(6);    //6
		animal.show();
//		animal.getAge();
//		animal.getLegs();
		
		
		
	}
}


class Animal
{
	String name;
	private int age;
	private int legs;   //腿的个数
	
	//对于属性的设置
	public void setLegs(int l)
	{
		if(l>=0 && l%2==0)
		{
			legs = l;
		}
		else
		{
			legs =0;
			//抛出一个异常
			
		}
	}
	
	//对于属性的获取
	public int getLegs()
	{
		return legs;
	}
	
	//设置 set
	public void setAge(int a)
	{
		if(age>=0)
		{
			 age = a;
		}
		else
		{
			age = 0;
		}
	}
	
	//获取 get
	public int getAge()
	{
		return age;
		
	}
	
	
	
	public void eat()
	{
		System.out.println("动物进食");
	}
	
	public void show()
	{
		System.out.println("name="+name+",age="+age+",legs="+legs);
		
	}
}








































































